package com.jt.redis;

import redis.clients.jedis.Jedis;

import java.util.Set;

/**
 * @author tang
 * @data 2021/10/11
 * @apiNode
 *
 * 投票系统的建议设计
 * 需求:
 * 1) 基于用户id对活动进行投票
 * 2) 一个用户id只能参与一次投票
 * 3) 可以查询投票总数以及参数投票的用户id
 * 设计:
 * 1) 数据存储结构:set结构(不允许重复)
 * 2）
 */
public class VoteDemo01 {
    static final String host = "192.168.126.129";
    static final int port = 6379;
    /**
     * 检查用户是否参与投票
     * @param activityId
     * @param userId
     */
    public static Boolean isVote(String activityId,String userId){
        //1.创建Jedis对象
        Jedis jedis = new Jedis(host, port);
        //2.检查是否投票
        Boolean flag = jedis.sismember(activityId, userId);
        //3.释放资源
        jedis.close();
        //4.返回结果
        return flag;
    }

    /**
     * 投票
     * @param activityId
     * @param userId
     */
    public static Long doVote(String activityId, String userId){
        //1.创建Jedis对象
        Jedis jedis = new Jedis(host, port);
        //2.执行投票
        Long sadd = jedis.sadd(activityId, userId);
        //3.释放资源
        jedis.close();
        //4.返回结果
        return sadd;
    }

    /**
     * 查看活动总投票数量
     * @param activityId
     */
    public static Long doGetVotes(String activityId){
        //1.创建Jedis对象
        Jedis jedis = new Jedis(host, port);
        //2.查看活动的投票数
        Long count = jedis.scard(activityId);
        //3.释放资源
        jedis.close();
        //4.返回结果
        return count;
    }

    /**
     * 获取参与投票当前活动的用户
     * @param activityId
     */
    public static Set<String> doGetUser(String activityId){
        //1.创建Jedis对象
        Jedis jedis = new Jedis(host, port);
        //2.查看参与活动的投票者
        Set<String> smembers = jedis.smembers(activityId);
        //3.释放资源
        jedis.close();
        //4.返回结果
        return smembers;
    }

    public static void main(String[] args) {
        //1.定义活动id,用户id
        String activityId = "10001";
        String user1 = "301";
        String user2 = "jack";

        //2.进行活动检查
        Boolean flag = isVote(activityId, user2);
        System.out.println("该玩家是否参与了投票? "+flag);
        if (!flag) {
            //3.进行投票
            doVote(activityId, user2);
            System.out.println("投票成功");

        }
        System.out.println("此用户已投票,请勿重复投票");

        //4.获取投票的总数
        Long count = doGetVotes(activityId);
        System.out.println("一共有 "+ count+" 票 ");

        //5.获取参与投票的用户
        Set<String> user = doGetUser(activityId);
        System.out.println("参与投票的用户为 : "+user);
    }

}
